home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / term / extras / source / term-source.lha / MiscPanel.c < prev    next >
C/C++ Source or Header  |  1995-06-17  |  9KB  |  397 lines

  1. /*
  2. **    MiscPanel.c
  3. **
  4. **    Editing panel for miscellaneous parts of the configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_USE=1000,GAD_CANCEL,GAD_DEFAULT,
  13.         GAD_PAGER,GAD_PAGEGROUP,
  14.         GAD_REQUESTERMODE,GAD_SET_REQUESTERSIZE
  15.     };
  16.  
  17. STATIC LONG __saveds
  18. ShowSize(struct Gadget *SomeGadget,WORD Level)
  19. {
  20.     return(1L << Level);
  21. }
  22.  
  23. BYTE __regargs
  24. MiscPanel(struct Configuration *Config,BYTE *Default)
  25. {
  26.     STATIC BYTE InitialPage = 0;
  27.  
  28.     struct LayoutHandle    *Handle;
  29.     BYTE             Cancel = FALSE;
  30.     STRPTR             PageTitle[4];
  31.  
  32.     STATIC LONG PageTitleID[] =
  33.     {
  34.         MSG_V36_0107,
  35.         MSG_V36_0108,
  36.         MSG_USER_INTERFACE_TXT,
  37.         -1
  38.     };
  39.  
  40.     LocalizeStringTable(PageTitle,PageTitleID);
  41.  
  42.     SaveConfig(Config,PrivateConfig);
  43.  
  44.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  45.         LH_LocaleHook,    &LocaleHook,
  46.         LH_ExitFlush,    FALSE,
  47.     TAG_DONE))
  48.     {
  49.         struct Window    *PanelWindow;
  50.         WORD         i,BufferSize;
  51.  
  52.         for(i = 0 ; i < 32 ; i++)
  53.         {
  54.             if((1L << i) == Config -> MiscConfig -> IOBufferSize)
  55.             {
  56.                 BufferSize = i;
  57.  
  58.                 break;
  59.             }
  60.         }
  61.  
  62.         LT_New(Handle,
  63.             LA_Type,VERTICAL_KIND,
  64.         TAG_DONE);
  65.         {
  66.             LT_New(Handle,
  67.                 LA_Type,VERTICAL_KIND,
  68.             TAG_DONE);
  69.             {
  70.                 LT_New(Handle,
  71.                     LA_Type,    CYCLE_KIND,
  72.                     LA_ID,        GAD_PAGER,
  73.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  74.                     GTCY_Labels,    PageTitle,
  75.                     LACY_AutoPageID,GAD_PAGEGROUP,
  76.                     LACY_TabKey,    TRUE,
  77.                     LA_BYTE,    &InitialPage,
  78.                 TAG_DONE);
  79.  
  80.                 LT_EndGroup(Handle);
  81.             }
  82.  
  83.             LT_New(Handle,
  84.                 LA_Type,    VERTICAL_KIND,
  85.                 LA_ID,        GAD_PAGEGROUP,
  86.                 LAGR_Frame,    TRUE,
  87.                 LAGR_ActivePage,InitialPage,
  88.             TAG_DONE);
  89.             {
  90.                 LT_New(Handle,
  91.                     LA_Type,    VERTICAL_KIND,
  92.                 TAG_DONE);
  93.                 {
  94.                     LT_New(Handle,
  95.                         LA_Type,    CHECKBOX_KIND,
  96.                         LA_LabelID,    MSG_MISCPANEL_BACKUP_CONFIGURATION_GAD,
  97.                         LA_BYTE,    &Config -> MiscConfig -> BackupConfig,
  98.                     TAG_DONE);
  99.  
  100.                     LT_New(Handle,
  101.                         LA_Type,    CHECKBOX_KIND,
  102.                         LA_LabelID,    MSG_MISCPANEL_SHOW_FAST_MACROS_GAD,
  103.                         LA_BYTE,    &Config -> MiscConfig -> OpenFastMacroPanel,
  104.                     TAG_DONE);
  105.  
  106.                     LT_New(Handle,
  107.                         LA_Type,    CHECKBOX_KIND,
  108.                         LA_LabelID,    MSG_MISCPANEL_RELEASE_SERIAL_DEVICE_GAD,
  109.                         LA_BYTE,    &Config -> MiscConfig -> ReleaseDevice,
  110.                     TAG_DONE);
  111.  
  112.                     LT_New(Handle,
  113.                         LA_Type,    CHECKBOX_KIND,
  114.                         LA_LabelID,    MSG_MISCPANEL_SIMPLE_IO_GAD,
  115.                         LA_BYTE,    &Config -> MiscConfig -> SimpleIO,
  116.                     TAG_DONE);
  117.  
  118.                     LT_New(Handle,
  119.                         LA_Type,    CHECKBOX_KIND,
  120.                         LA_LabelID,    MSG_OVERWRITE_WARNING_TXT,
  121.                         LA_BYTE,    &Config -> MiscConfig -> ProtectiveMode,
  122.                     TAG_DONE);
  123.  
  124.                     LT_New(Handle,
  125.                         LA_Type,    CHECKBOX_KIND,
  126.                         LA_LabelID,    MSG_MISCPANEL_CREATE_ICONS_GAD,
  127.                         LA_BYTE,    &Config -> MiscConfig -> CreateIcons,
  128.                     TAG_DONE);
  129.  
  130.                     LT_EndGroup(Handle);
  131.                 }
  132.  
  133.                 LT_New(Handle,
  134.                     LA_Type,    VERTICAL_KIND,
  135.                 TAG_DONE);
  136.                 {
  137.                     LT_New(Handle,
  138.                         LA_Type,        SliderType,
  139.                         LA_LabelID,        MSG_MISCPANEL_PROGRAM_PRIORITY_GAD,
  140.                         GTSL_Min,        -128,
  141.                         GTSL_Max,         127,
  142.                         GTSL_LevelFormat,    "%4ld",
  143.                         LA_BYTE,        &Config -> MiscConfig -> Priority,
  144.                         LA_Chars,        12,
  145.                     TAG_DONE);
  146.  
  147.                     LT_New(Handle,
  148.                         LA_Type,        SliderType,
  149.                         LA_LabelID,        MSG_V36_1810,
  150.                         LA_WORD,        &BufferSize,
  151.                         GTSL_Min,        12,
  152.                         GTSL_Max,        20,
  153.                         GTSL_DispFunc,        ShowSize,
  154.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  155.                     TAG_DONE);
  156.  
  157.                     LT_EndGroup(Handle);
  158.                 }
  159.  
  160.                 LT_New(Handle,
  161.                     LA_Type,    VERTICAL_KIND,
  162.                 TAG_DONE);
  163.                 {
  164.                     LT_New(Handle,
  165.                         LA_Type,    CYCLE_KIND,
  166.                         LA_LabelID,    MSG_TERMINALPANEL_ALERT_GAD,
  167.                         LA_BYTE,    &Config -> MiscConfig -> AlertMode,
  168.                         LACY_FirstLabel,MSG_TERMINALPANEL_ALERT_NONE_TXT,
  169.                         LACY_LastLabel,    MSG_TERMINALPANEL_ALERT_SIGNAL_SCREEN_TXT,
  170.                     TAG_DONE);
  171.  
  172.                     LT_New(Handle,
  173.                         LA_Type,    XBAR_KIND,
  174.                     TAG_DONE);
  175.  
  176.                     LT_New(Handle,
  177.                         LA_Type,    CYCLE_KIND,
  178.                         LA_LabelID,    MSG_REQUESTER_DIMENSIONS_TXT,
  179.                         LA_BYTE,    &Config -> MiscConfig -> RequesterMode,
  180.                         LACY_FirstLabel,MSG_LABEL_CENTRE_TXT,
  181.                         LACY_LastLabel,    MSG_LABEL_IGNORE_TXT,
  182.                         LA_ID,        GAD_REQUESTERMODE,
  183.                     TAG_DONE);
  184.  
  185.                     LT_New(Handle,
  186.                         LA_Type,    BUTTON_KIND,
  187.                         LA_LabelID,    MSG_REQUESTER_EDIT_SIZE_TXT,
  188.                         LA_ID,        GAD_SET_REQUESTERSIZE,
  189.                         GA_Disabled,    Config -> MiscConfig -> RequesterMode == REQUESTERMODE_IGNORE,
  190.                     TAG_DONE);
  191.  
  192.                     LT_EndGroup(Handle);
  193.                 }
  194.  
  195.                 LT_EndGroup(Handle);
  196.             }
  197.  
  198.             LT_New(Handle,
  199.                 LA_Type,VERTICAL_KIND,
  200.             TAG_DONE);
  201.             {
  202.                 LT_New(Handle,
  203.                     LA_Type,    XBAR_KIND,
  204.                     LAXB_FullSize,    TRUE,
  205.                 TAG_DONE);
  206.  
  207.                 LT_EndGroup(Handle);
  208.             }
  209.  
  210.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  211.                 LAGR_SameSize,    TRUE,
  212.                 LAGR_Spread,    TRUE,
  213.             TAG_DONE);
  214.             {
  215.                 LT_New(Handle,
  216.                     LA_Type,    BUTTON_KIND,
  217.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  218.                     LA_ID,        GAD_USE,
  219.                     LABT_ReturnKey,    TRUE,
  220.                     LABT_ExtraFat,    TRUE,
  221.                 TAG_DONE);
  222.  
  223.                 if(Default)
  224.                 {
  225.                     LT_New(Handle,
  226.                         LA_Type,    BUTTON_KIND,
  227.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  228.                         LA_ID,        GAD_DEFAULT,
  229.                         LABT_ExtraFat,    TRUE,
  230.                     TAG_DONE);
  231.                 }
  232.  
  233.                 LT_New(Handle,
  234.                     LA_Type,    BUTTON_KIND,
  235.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  236.                     LA_ID,        GAD_CANCEL,
  237.                     LABT_EscKey,    TRUE,
  238.                     LABT_ExtraFat,    TRUE,
  239.                 TAG_DONE);
  240.  
  241.                 LT_EndGroup(Handle);
  242.             }
  243.  
  244.             LT_EndGroup(Handle);
  245.         }
  246.  
  247.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_MISCPANEL_MISCELLANEOUS_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  248.             LAWN_HelpHook,        &GuideHook,
  249.             LAWN_Parent,        Window,
  250.             WA_DepthGadget,        TRUE,
  251.             WA_CloseGadget,        TRUE,
  252.             WA_DragBar,        TRUE,
  253.             WA_RMBTrap,        TRUE,
  254.             WA_Activate,        TRUE,
  255.         TAG_DONE))
  256.         {
  257.             struct IntuiMessage    *Message;
  258.             BOOLEAN             Done = FALSE;
  259.             ULONG             MsgClass,
  260.                          MsgQualifier;
  261.             UWORD             MsgCode;
  262.             struct Gadget        *MsgGadget;
  263.             struct FileRequester    *FileRequester = NULL;
  264.             BOOL             JustCreated;
  265.  
  266.             GuideContext(CONTEXT_MISC);
  267.  
  268.             PushWindow(PanelWindow);
  269.  
  270.             LT_ShowWindow(Handle,TRUE);
  271.  
  272.             do
  273.             {
  274.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  275.                 {
  276.                     SaveConfig(PrivateConfig,Config);
  277.  
  278.                     break;
  279.                 }
  280.  
  281.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  282.                 {
  283.                     MsgClass    = Message -> Class;
  284.                     MsgQualifier    = Message -> Qualifier;
  285.                     MsgCode        = Message -> Code;
  286.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  287.  
  288.                     GT_ReplyIMsg(Message);
  289.  
  290.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  291.  
  292.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  293.                     {
  294.                         SaveConfig(PrivateConfig,Config);
  295.  
  296.                         Done = TRUE;
  297.                     }
  298.  
  299.                     if(MsgClass == IDCMP_GADGETUP)
  300.                     {
  301.                         switch(MsgGadget -> GadgetID)
  302.                         {
  303.                             case GAD_REQUESTERMODE:
  304.  
  305.                                 LT_SetAttributes(Handle,GAD_SET_REQUESTERSIZE,
  306.                                     GA_Disabled,Config -> MiscConfig -> RequesterMode == REQUESTERMODE_IGNORE,
  307.                                 TAG_DONE);
  308.  
  309.                                 break;
  310.  
  311.                             case GAD_SET_REQUESTERSIZE:
  312.  
  313.                                 LT_LockWindow(PanelWindow);
  314.  
  315.                                 if(!FileRequester)
  316.                                 {
  317.                                     if(FileRequester = (struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,
  318.                                         ASLFR_Window,        PanelWindow,
  319.                                         ASLFR_TitleText,    LocaleString(MSG_MOVE_RESIZE_THIS_WINDOW_TXT),
  320.                                         ASLFR_PositiveText,    LocaleString(MSG_GLOBAL_USE_GAD),
  321.                                     TAG_DONE))
  322.                                         JustCreated = TRUE;
  323.                                 }
  324.  
  325.                                 if(FileRequester)
  326.                                 {
  327.                                     BOOL Result;
  328.  
  329.                                     if(JustCreated && (!Config -> MiscConfig -> RequesterWidth || !Config -> MiscConfig -> RequesterHeight))
  330.                                         JustCreated = FALSE;
  331.  
  332.                                     Result = AslRequestTags(FileRequester,
  333.                                         ASLFR_InitialLeftEdge,                Window -> LeftEdge + Config -> MiscConfig -> RequesterLeft,
  334.                                         ASLFR_InitialTopEdge,                Window -> TopEdge + Config -> MiscConfig -> RequesterTop,
  335.                                         JustCreated ? ASLFR_InitialWidth : TAG_IGNORE,    Config -> MiscConfig -> RequesterWidth,
  336.                                         JustCreated ? ASLFR_InitialHeight : TAG_IGNORE,    Config -> MiscConfig -> RequesterHeight,
  337.                                     TAG_DONE);
  338.  
  339.                                     if(!Result && IoErr())
  340.                                         Result = AslRequest(FileRequester,NULL);
  341.  
  342.                                     if(Result)
  343.                                     {
  344.                                         Config -> MiscConfig -> RequesterLeft    = FileRequester -> fr_LeftEdge - Window -> LeftEdge;
  345.                                         Config -> MiscConfig -> RequesterTop    = FileRequester -> fr_TopEdge - Window -> TopEdge;
  346.                                         Config -> MiscConfig -> RequesterWidth    = FileRequester -> fr_Width;
  347.                                         Config -> MiscConfig -> RequesterHeight    = FileRequester -> fr_Height;
  348.                                     }
  349.  
  350.                                     JustCreated = FALSE;
  351.                                 }
  352.  
  353.                                 LT_UnlockWindow(PanelWindow);
  354.  
  355.                                 break;
  356.  
  357.                             case GAD_USE:
  358.  
  359.                                 Config -> MiscConfig -> IOBufferSize = 1L << BufferSize;
  360.  
  361.                                 Done = TRUE;
  362.                                 break;
  363.  
  364.                             case GAD_CANCEL:
  365.  
  366.                                 SaveConfig(PrivateConfig,Config);
  367.  
  368.                                 Cancel = Done = TRUE;
  369.                                 break;
  370.  
  371.                             case GAD_DEFAULT:
  372.  
  373.                                 *Default = TRUE;
  374.  
  375.                                 Done = TRUE;
  376.                                 break;
  377.                         }
  378.                     }
  379.                 }
  380.             }
  381.             while(!Done);
  382.  
  383.             if(FileRequester)
  384.                 FreeAslRequest(FileRequester);
  385.  
  386.             PopWindow();
  387.         }
  388.  
  389.         LT_DeleteHandle(Handle);
  390.     }
  391.  
  392.     if(Default)
  393.         return((BYTE)(!Cancel));
  394.     else
  395.         return((BYTE)memcmp(PrivateConfig -> MiscConfig,Config -> MiscConfig,sizeof(struct MiscSettings)));
  396. }
  397.